package com.example.stuwork.dao;

import com.example.stuwork.pojo.Student;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 学生数据访问接口
 */
@Mapper
public interface StudentDao {
    
    /**
     * 通过学号查找学生
     *
     * @param studentId 学号
     * @return 学生对象
     */
    Student findStudentById(String studentId);
    
    /**
     * 通过学号和密码查找学生（用于登录验证）
     *
     * @param studentId 学号
     * @param password  密码
     * @return 学生对象
     */
    Student findStudentByIdAndPassword(@Param("studentId") String studentId, @Param("password") String password);
    
    /**
     * 添加学生
     *
     * @param student 学生对象
     * @return 影响的行数
     */
    int addStudent(Student student);
    
    /**
     * 更新学生信息
     *
     * @param student 学生对象
     * @return 影响的行数
     */
    int updateStudent(Student student);
    
    /**
     * 删除学生
     *
     * @param studentId 学号
     * @return 影响的行数
     */
    int deleteStudent(String studentId);
    
    /**
     * 查找所有学生
     *
     * @return 学生列表
     */
    List<Student> findAllStudents();
    
    /**
     * 按班级ID查找学生
     *
     * @param classId 班级ID
     * @return 学生列表
     */
    List<Student> findStudentsByClassId(Long classId);
    
    /**
     * 按课程ID查找学生
     *
     * @param courseId 课程ID
     * @return 学生列表
     */
    List<Student> findStudentsByCourseId(Long courseId);
    
    /**
     * 按院系编号查找学生
     *
     * @param deptNumber 院系编号
     * @return 学生列表
     */
    List<Student> findStudentsByDeptNumber(String deptNumber);
    
    /**
     * 按入学年份查找学生
     *
     * @param year 入学年份
     * @return 学生列表
     */
    List<Student> findStudentsByYear(String year);
    
    /**
     * 按专业编码查找学生
     *
     * @param majorCode 专业编码
     * @return 学生列表
     */
    List<Student> findStudentsByMajorCode(String majorCode);
    
    /**
     * 关键字搜索学生（学号或姓名）
     *
     * @param keyword 关键字
     * @return 学生列表
     */
    List<Student> searchStudents(String keyword);
    
    /**
     * 更新学生密码
     *
     * @param studentId   学号
     * @param newPassword 新密码
     * @return 影响的行数
     */
    int updatePassword(@Param("studentId") String studentId, @Param("newPassword") String newPassword);
} 